Commit 6e91527e by 桂前礼

feat: [1003543] 后台配置客服老师

parent 193499e7
package com.pcloud.book.group.biz;
import com.pcloud.book.group.vo.WeworkTeacherBookBindPageVO;
import com.pcloud.book.group.vo.WeworkTeacherBookBindVO;
import com.pcloud.book.group.vo.WeworkTeacherVO;
import com.pcloud.common.page.PageBeanNew;
import java.util.List;
/**
* WeworkTeacherBiz
*
* @author guiq
* @version 1.0
* @since 2020年9月7日
*/
public interface WeworkTeacherBiz {
/**
* 新增
*
* @param weworkTeacherVO VO
* @return 主键ID
*/
Long addWxworkTeacher(WeworkTeacherVO weworkTeacherVO);
/**
* 更新
*
* @param weworkTeacherVO VO
* @return 主键ID
*/
Long updateWxworkTeacher(WeworkTeacherVO weworkTeacherVO);
/**
* 分页查询
*
* @param name 真实姓名
* @param isOpen 开启状态
* @param teacherType 类型
* @param currentPage 分页参数
* @param numPerPage 分页参数
* @return 分页结果
*/
PageBeanNew<WeworkTeacherVO> getWxworkTeacherList(String name, Integer isOpen, Integer teacherType, Integer currentPage, Integer numPerPage);
/**
* 获取所有开启的
* @return 所有结果
* @param bookId
*/
List<WeworkTeacherVO> queryAll(Long bookId);
/**
* 根据主键删除记录
* @param id 主键ID
*/
void deleteTeacherById(Long id);
/**
* 新增图书与客服老师绑定关系
* @param bindVO VO
*/
void bindBookWxworkTeacher(WeworkTeacherBookBindVO bindVO);
/**
* 删除图书与客服老师绑定关系
* @param bookId VO
*/
void deleteBookWxworkTeacher(Long bookId);
/**
* 分页获取绑定关系
*
* @param name
* @param currentPage 分页参数
* @param numPerPage 分页参数
* @return 分页结果
*/
PageBeanNew<WeworkTeacherBookBindPageVO> getBookWxworkTeacherList(String name, Integer currentPage, Integer numPerPage);
}
package com.pcloud.book.group.biz.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.group.biz.GroupMaterialAccountBiz;
import com.pcloud.book.group.biz.WeworkTeacherBiz;
import com.pcloud.book.group.entity.GroupMaterialAccount;
import com.pcloud.book.group.entity.WeworkTeacher;
import com.pcloud.book.group.entity.WeworkTeacherBookBind;
import com.pcloud.book.group.enums.UseTypeEnum;
import com.pcloud.book.group.mapper.WeworkTeacherBookBindMapper;
import com.pcloud.book.group.mapper.WeworkTeacherMapper;
import com.pcloud.book.group.vo.WeworkTeacherBookBindPageVO;
import com.pcloud.book.group.vo.WeworkTeacherBookBindVO;
import com.pcloud.book.group.vo.WeworkTeacherVO;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.utils.ParamChecker;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.facade.wechat.material.dto.GroupNewsMaterialAddDTO;
import com.pcloud.facade.wechat.material.service.MaterialService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* WeworkTeacherBizImpl
*
* @author guiq
* @version 1.0
* @since 2020年9月7日
*/
@Component("weworkTeacherBiz")
@Slf4j
public class WeworkTeacherBizImpl implements WeworkTeacherBiz {
/**
* 客服老师素材代码模板
*/
public static final String WEWORK_TEACHER_MATERIAL_HTML = "<div style='margin:10px 0;box-sizing: border-box;'><div style='margin:55px auto 32px;width: 275px;height: 255px;'><div style='width: 275px;height: 255px;background-color: #ffffff;border-radius: 6px;border: solid 1px #66c84f'><div style='margin-top:-16px;margin-left:53px;width: 168px;height: 32px;line-height: 32px;text-align: center; font-size: 14px;color: #ffffff; background-color: #66c84f;border-radius: 6px;'>长按识别下面二维码</div><div style='height: 23px;display: block;text-align: center;margin: 10px auto;letter-spacing: 6px;'>\uD83D\uDC47\uD83D\uDC47\uD83D\uDC47</div><div style='width: 172px;height:172px;display: block;margin: 0 auto;'><img class='qrcode'src='${qrcodeUrl}'alt=''></div></div></div></div>";
@Autowired
private WeworkTeacherMapper weworkTeacherMapper;
@Autowired
private MaterialService materialService;
@Autowired
private GroupMaterialAccountBiz groupMaterialAccountBiz;
@Autowired
private WeworkTeacherBookBindMapper weworkTeacherBookBindMapper;
@Override
@ParamLog(value = "新增客服老师")
@Transactional(rollbackFor = Exception.class)
public Long addWxworkTeacher(WeworkTeacherVO weworkTeacherVO) {
// 参数校验
weworkTeacherVO.checkParam4Add();
WeworkTeacher weworkTeacher = new WeworkTeacher();
BeanUtil.copyProperties(weworkTeacherVO, weworkTeacher);
// 创建永久图文素材
GroupMaterialAccount account;
String mediaId;
String materialUrl;
try {
account = groupMaterialAccountBiz.getActiveAccount(UseTypeEnum.THIRD_GROUP.value);
GroupNewsMaterialAddDTO materialAddDTO = new GroupNewsMaterialAddDTO();
materialAddDTO.setAccountId(account.getAccountId());
materialAddDTO.setGroupName(weworkTeacher.getTitle());
materialAddDTO.setQrcodeUrl(weworkTeacher.getQrcode());
materialAddDTO.setGroupHeadImg(account.getHeadMediaId());
materialAddDTO.setCoverMediaId(account.getCoverMediaId());
materialAddDTO.setHtml(WEWORK_TEACHER_MATERIAL_HTML);
mediaId = ResponseHandleUtil.parseResponse(materialService.getGroupNewsMaterial(materialAddDTO), String.class);
materialUrl = ResponseHandleUtil.parseResponse(materialService.getGroupNewsMaterialByMediaId(mediaId), String.class);
} catch (Exception e) {
log.info("[WeworkTeacherBizImpl.addWxworkTeacher] 新增客服老师,创建素材失败!", e);
throw new BookBizException(BookBizException.ERROR, "新增客服老师,创建素材失败!");
}
// 新增客服老师记录
weworkTeacher.setAccountId(account.getAccountId());
weworkTeacher.setCreateTime(new Date());
weworkTeacher.setUpdateTime(new Date());
weworkTeacher.setMediaId(mediaId);
weworkTeacher.setMaterialUrl(materialUrl);
weworkTeacherMapper.insert(weworkTeacher);
return weworkTeacher.getId();
}
@Override
@ParamLog(value = "更新客服老师", isAfterReturn = false)
@Transactional(rollbackFor = Exception.class)
public Long updateWxworkTeacher(WeworkTeacherVO weworkTeacherVO) {
weworkTeacherVO.checkParam4Update();
WeworkTeacher weworkTeacher = weworkTeacherMapper.selectByPrimaryKey(weworkTeacherVO.getId());
if (Objects.isNull(weworkTeacher)) {
log.info("[WeworkTeacherBizImpl.updateWxworkTeacher] 更新客服老师,记录不存在! weworkTeacherVO:{}", weworkTeacherVO);
throw new BookBizException(BookBizException.ID_NOT_EXIST, "更新客服老师,记录不存在!");
}
boolean isChanged = weworkTeacherVO.checkIsChanged(weworkTeacher);
BeanUtil.copyProperties(weworkTeacherVO, weworkTeacher);
weworkTeacher.setUpdateTime(new Date());
weworkTeacherMapper.updateByPrimaryKeySelective(weworkTeacher);
if (isChanged) {
// 更新素材
GroupMaterialAccount account = null;
try {
account = groupMaterialAccountBiz.getByAccountId(weworkTeacher.getAccountId());
GroupNewsMaterialAddDTO materialAddDTO = new GroupNewsMaterialAddDTO();
materialAddDTO.setMediaId(weworkTeacher.getMediaId());
materialAddDTO.setAccountId(account.getAccountId());
materialAddDTO.setGroupName(weworkTeacher.getTitle());
materialAddDTO.setQrcodeUrl(weworkTeacher.getQrcode());
materialAddDTO.setGroupHeadImg(account.getHeadMediaId());
materialAddDTO.setCoverMediaId(account.getCoverMediaId());
materialAddDTO.setHtml(WEWORK_TEACHER_MATERIAL_HTML);
ResponseHandleUtil.parseResponse(materialService.getGroupNewsMaterial(materialAddDTO), String.class);
} catch (Exception e) {
log.info("[WeworkTeacherBizImpl.updateWxworkTeacher] 更新客服老师,更新素材失败! weworkTeacherVO:{} account:{}", weworkTeacherVO, account);
throw new BookBizException(BookBizException.ID_NOT_EXIST, "更新客服老师,更新素材失败!");
}
}
return weworkTeacher.getId();
}
@Override
public PageBeanNew<WeworkTeacherVO> getWxworkTeacherList(String name, Integer isOpen, Integer teacherType, Integer currentPage, Integer numPerPage) {
int offset = numPerPage * currentPage;
Integer count = weworkTeacherMapper.count4WxworkTeacherList(name, isOpen, teacherType);
if (Objects.isNull(count) || count < 1) {
return new PageBeanNew<>();
}
List<WeworkTeacherVO> list = weworkTeacherMapper.getWxworkTeacherList(name, isOpen, teacherType, offset, numPerPage);
return new PageBeanNew<>(currentPage, numPerPage, count, list);
}
@Override
public List<WeworkTeacherVO> queryAll(Long bookId) {
if (Objects.nonNull(bookId)){
WeworkTeacherBookBind bind = weworkTeacherBookBindMapper.getByBookId(bookId);
if (Objects.isNull(bind) || StrUtil.isBlank(bind.getWeworkTeacherArr())){
return new ArrayList<>();
}
List<Long> longs = JSONObject.parseArray(bind.getWeworkTeacherArr(), Long.class);
if (CollUtil.isEmpty(longs)){
return new ArrayList<>();
}
return weworkTeacherMapper.getMaterialByIds(longs);
}
return weworkTeacherMapper.queryAll();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteTeacherById(Long id) {
weworkTeacherMapper.deleteByPrimaryKey(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void bindBookWxworkTeacher(WeworkTeacherBookBindVO bindVO) {
bindVO.checkParam4Bind();
WeworkTeacherBookBind weworkTeacherBookBind = new WeworkTeacherBookBind();
BeanUtil.copyProperties(bindVO, weworkTeacherBookBind);
weworkTeacherBookBind.setUpdateTime(new Date());
if (Objects.isNull(weworkTeacherBookBindMapper.getByBookId(bindVO.getBookId()))){
weworkTeacherBookBind.setCreateTime(new Date());
}
weworkTeacherBookBind.setWeworkTeacherArr(JSONObject.toJSONString(bindVO.getTeacherList()));
weworkTeacherBookBindMapper.insertOrUpdate(weworkTeacherBookBind);
}
@Override
public void deleteBookWxworkTeacher(Long bookId) {
weworkTeacherBookBindMapper.deleteByBookId(bookId);
}
@Override
public PageBeanNew<WeworkTeacherBookBindPageVO> getBookWxworkTeacherList(String name, Integer currentPage, Integer numPerPage) {
ParamChecker.checkPageParamIsAbsent(currentPage, numPerPage, "分页参数错误!");
List<WeworkTeacherBookBindPageVO> pageList = new ArrayList<>();
int offset = currentPage * numPerPage;
int count = weworkTeacherBookBindMapper.count4BookWxworkTeacherList(name);
if (count == 0) {
return new PageBeanNew<>();
}
List<WeworkTeacherBookBind> list = weworkTeacherBookBindMapper.getBookWxworkTeacherList(name, offset, numPerPage);
List<Long> ids = new ArrayList<>();
if (CollUtil.isNotEmpty(list)) {
for (WeworkTeacherBookBind weworkTeacherBookBind : list) {
if (StrUtil.isNotBlank(weworkTeacherBookBind.getWeworkTeacherArr())) {
ids.addAll(JSONObject.parseArray(weworkTeacherBookBind.getWeworkTeacherArr(), Long.class));
}
}
}
if (CollUtil.isNotEmpty(ids)) {
// 查询教师集合
List<WeworkTeacher> teachers = weworkTeacherMapper.listByIds(ids);
Map<Long, WeworkTeacher> teacherMap = teachers.stream().collect(Collectors.toMap(WeworkTeacher::getId, weworkTeacher -> weworkTeacher));
if (CollUtil.isNotEmpty(teacherMap)) {
for (WeworkTeacherBookBind weworkTeacherBookBind : list) {
WeworkTeacherBookBindPageVO pageVO = new WeworkTeacherBookBindPageVO();
BeanUtil.copyProperties(weworkTeacherBookBind, pageVO);
ArrayList<WeworkTeacher> arrayList = new ArrayList<>();
if (StrUtil.isNotBlank(weworkTeacherBookBind.getWeworkTeacherArr())) {
List<Long> parseArray = JSONObject.parseArray(weworkTeacherBookBind.getWeworkTeacherArr(), Long.class);
for (Long aLong : parseArray) {
if (Objects.nonNull(teacherMap.get(aLong))){
arrayList.add(teacherMap.get(aLong));
}
}
}
pageVO.setTeacherList(arrayList);
pageList.add(pageVO);
}
}
}
return new PageBeanNew<>(currentPage, numPerPage, count, pageList);
}
}
package com.pcloud.book.group.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* wework_teacher
*
* @author
*/
@ApiModel("客服老师企业微信二维码信息")
@Data
public class WeworkTeacher implements Serializable {
@ApiModelProperty("id")
private Long id;
/**
* 企业微信二维码
*/
@ApiModelProperty("企业微信二维码")
private String qrcode;
/**
* 真实姓名
*/
@ApiModelProperty("真实姓名")
private String realName;
/**
* 图文素材标题名称
*/
@ApiModelProperty("图文素材标题名称")
private String title;
/**
* 客服类型:1:苏老师 2:张哥哥
*/
@ApiModelProperty("客服类型:1:苏老师 2:张哥哥")
private Integer teacherType;
/**
* 开关状态
*/
@ApiModelProperty("开关状态")
private Integer isOpen;
/**
* 图文素材地址
*/
@ApiModelProperty("图文素材地址")
private String materialUrl;
/**
* 图文素材媒体ID
*/
@ApiModelProperty("图文素材媒体ID")
private String mediaId;
/**
* 公众号ID
*/
@ApiModelProperty("公众号ID")
private Long accountId;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("创建时间")
private Date createTime;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("更新时间")
private Date updateTime;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.pcloud.book.group.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* wework_teacher_book_bind
* @author
*/
@Data
public class WeworkTeacherBookBind implements Serializable {
private Long id;
/**
* 图书ID
*/
@ApiModelProperty("图书ID")
private Long bookId;
/**
* 图书名称
*/
@ApiModelProperty("图书名称")
private String bookName;
/**
* ISBN
*/
@ApiModelProperty("ISBN")
private String isbn;
/**
* 客服老师列表
*/
@ApiModelProperty("客服老师列表")
private String weworkTeacherArr;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
private Date createTime;
/**
* 更新时间
*/
@ApiModelProperty("更新时间")
private Date updateTime;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.pcloud.book.group.facade.impl;
import com.pcloud.book.group.biz.WeworkTeacherBiz;
import com.pcloud.book.group.vo.WeworkTeacherBookBindVO;
import com.pcloud.book.group.vo.WeworkTeacherVO;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.utils.ParamChecker;
import com.pcloud.common.utils.SessionUtil;
import com.pcloud.common.utils.cookie.Cookie;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 客服老师二维码配置相关接口
*
* @author guiq
* @version 1.0
* @since 2020年9月7日
*/
@RequestMapping("weworkTeacher")
@RestController("weworkTeacherFacade")
public class WeworkTeacherFacadeImpl {
@Autowired
private WeworkTeacherBiz weworkTeacherBiz;
@ApiOperation(value = "新增客服老师", httpMethod = "POST")
@RequestMapping(value = "addWxworkTeacher", method = RequestMethod.POST)
ResponseDto<Long> addWxworkTeacher(@RequestHeader("token") String token, @RequestBody WeworkTeacherVO weworkTeacherVO) {
SessionUtil.getInfoToken4Redis(token);
return new ResponseDto<>(weworkTeacherBiz.addWxworkTeacher(weworkTeacherVO));
}
@ApiOperation(value = "删除客服老师", httpMethod = "GET")
@RequestMapping(value = "deleteTeacherById", method = RequestMethod.GET)
ResponseDto<?> deleteTeacherById(@RequestHeader("token") String token, @RequestParam("id") Long id) {
SessionUtil.getInfoToken4Redis(token);
weworkTeacherBiz.deleteTeacherById(id);
return new ResponseDto<>();
}
@ApiOperation(value = "修改客服老师", httpMethod = "POST")
@RequestMapping(value = "updateWxworkTeacher", method = RequestMethod.POST)
ResponseDto<Long> updateWxworkTeacher(@RequestHeader("token") String token, @RequestBody WeworkTeacherVO weworkTeacherVO) {
SessionUtil.getInfoToken4Redis(token);
return new ResponseDto<>(weworkTeacherBiz.updateWxworkTeacher(weworkTeacherVO));
}
@ApiOperation(value = "分页查询客服老师", httpMethod = "GET")
@RequestMapping(value = "getWxworkTeacherList", method = RequestMethod.GET)
ResponseDto<PageBeanNew<WeworkTeacherVO>> getWxworkTeacherList(@RequestHeader("token") String token,
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "isOpen", required = false) Integer isOpen,
@RequestParam(value = "teacherType", required = false) Integer teacherType,
@RequestParam(value = "currentPage", defaultValue = "0") Integer currentPage,
@RequestParam(value = "numPerPage", defaultValue = "10") Integer numPerPage) {
SessionUtil.getInfoToken4Redis(token);
ParamChecker.checkPageParamIsAbsent(currentPage, numPerPage, "分页参数错误");
return new ResponseDto<>(weworkTeacherBiz.getWxworkTeacherList(name, isOpen, teacherType, currentPage, numPerPage));
}
@ApiOperation(value = "客户端获取客服老师", httpMethod = "GET")
@RequestMapping(value = "getWxworkTeacherList4Applet", method = RequestMethod.GET)
ResponseDto<List<WeworkTeacherVO>> getWxworkTeacherList4Applet(@CookieValue("userInfo") String userInfo, @RequestParam(value = "bookId", required = false) Long bookId) {
Cookie.getUserInfo(userInfo);
return new ResponseDto<>(weworkTeacherBiz.queryAll(bookId));
}
@ApiOperation(value = "绑定图书与客服老师", httpMethod = "POST")
@RequestMapping(value = "bindBookWxworkTeacher", method = RequestMethod.POST)
ResponseDto<?> bindBookWxworkTeacher(@RequestHeader("token") String token, @RequestBody WeworkTeacherBookBindVO bindVO) {
SessionUtil.getInfoToken4Redis(token);
weworkTeacherBiz.bindBookWxworkTeacher(bindVO);
return new ResponseDto<>();
}
@ApiOperation(value = "删除绑定", httpMethod = "GET")
@RequestMapping(value = "deleteBookWxworkTeacher", method = RequestMethod.GET)
ResponseDto<?> deleteBookWxworkTeacher(@RequestHeader("token") String token, @RequestParam("bookId") Long bookId) {
SessionUtil.getInfoToken4Redis(token);
weworkTeacherBiz.deleteBookWxworkTeacher(bookId);
return new ResponseDto<>();
}
@ApiOperation(value = "分页获取绑定关系", httpMethod = "GET")
@RequestMapping(value = "getBookWxworkTeacherList", method = RequestMethod.GET)
ResponseDto<?> getBookWxworkTeacherList(@RequestHeader("token") String token,
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "currentPage", defaultValue = "0") Integer currentPage,
@RequestParam(value = "numPerPage", defaultValue = "10") Integer numPerPage) {
SessionUtil.getInfoToken4Redis(token);
return new ResponseDto<>(weworkTeacherBiz.getBookWxworkTeacherList(name, currentPage, numPerPage));
}
}
package com.pcloud.book.group.mapper;
import com.pcloud.book.group.entity.WeworkTeacherBookBind;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
@Mapper
@Component
public interface WeworkTeacherBookBindMapper {
int deleteByPrimaryKey(Long id);
int insert(WeworkTeacherBookBind record);
int insertSelective(WeworkTeacherBookBind record);
WeworkTeacherBookBind selectByPrimaryKey(Long id);
int updateByPrimaryKeySelective(WeworkTeacherBookBind record);
int updateByPrimaryKey(WeworkTeacherBookBind record);
int insertOrUpdate(WeworkTeacherBookBind record);
void deleteByBookId(Long bookId);
int count4BookWxworkTeacherList(@Param("name") String name);
List<WeworkTeacherBookBind> getBookWxworkTeacherList(@Param("name") String name, @Param("offset") int offset, @Param("limit") Integer limit);
WeworkTeacherBookBind getByBookId(@Param("bookId") Long bookId);
}
\ No newline at end of file
package com.pcloud.book.group.mapper;
import com.pcloud.book.group.entity.WeworkTeacher;
import com.pcloud.book.group.vo.WeworkTeacherVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@Mapper
public interface WeworkTeacherMapper {
int deleteByPrimaryKey(Long id);
int insert(WeworkTeacher record);
int insertSelective(WeworkTeacher record);
WeworkTeacher selectByPrimaryKey(Long id);
int updateByPrimaryKeySelective(WeworkTeacher record);
int updateByPrimaryKey(WeworkTeacher record);
Integer count4WxworkTeacherList(@Param("name") String name, @Param("isOpen") Integer isOpen, @Param("teacherType") Integer teacherType);
List<WeworkTeacherVO> getWxworkTeacherList(@Param("name") String name, @Param("isOpen") Integer isOpen,
@Param("teacherType") Integer teacherType, @Param("offset") Integer offset,
@Param("limit") Integer limit);
List<WeworkTeacherVO> queryAll();
List<WeworkTeacher> listByIds(@Param("ids") List<Long> ids);
List<WeworkTeacherVO> getMaterialByIds(@Param("longs") List<Long> longs);
}
\ No newline at end of file
package com.pcloud.book.group.vo;
import com.pcloud.book.group.entity.WeworkTeacher;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 客服老师与图书绑定关系
*
* @author guiq
* @version 1.0
* @since 2020年9月7日
*/
@Data
@ApiModel("客服老师与图书绑定关系")
public class WeworkTeacherBookBindPageVO {
/**
* 图书ID
*/
@ApiModelProperty("图书ID")
private Long bookId;
/**
* 图书名称
*/
@ApiModelProperty("图书名称")
private String bookName;
/**
* ISBN
*/
@ApiModelProperty("ISBN")
private String isbn;
/**
* 客服老师列表
*/
@ApiModelProperty("客服老师列表")
private List<WeworkTeacher> teacherList;
}
package com.pcloud.book.group.vo;
import com.pcloud.common.utils.ParamChecker;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 客服老师与图书绑定关系
*
* @author guiq
* @version 1.0
* @since 2020年9月7日
*/
@Data
@ApiModel("客服老师与图书绑定关系")
public class WeworkTeacherBookBindVO {
/**
* 图书ID
*/
@ApiModelProperty("图书ID")
private Long bookId;
/**
* 图书名称
*/
@ApiModelProperty("图书名称")
private String bookName;
/**
* ISBN
*/
@ApiModelProperty("ISBN")
private String isbn;
/**
* 客服老师列表
*/
@ApiModelProperty("客服老师列表")
private List<Long> teacherList;
public void checkParam4Bind(){
ParamChecker.checkNumberIsNull(this.bookId,"图书ID不能为空!");
ParamChecker.checkStringIsEmpty(this.isbn,"图书ISBN不能为空!");
ParamChecker.checkStringIsEmpty(this.bookName,"图书名称不能为空!");
ParamChecker.checkListIsEmpty(this.teacherList,"客服老师不能为空!");
}
}
package com.pcloud.book.group.vo;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.pcloud.book.group.entity.WeworkTeacher;
import com.pcloud.common.utils.ParamChecker;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
/**
* 客服老师企业微信二维码信息
*
* @author guiq
* @version 1.0
* @since 2020年9月7日
*/
@ApiModel("客服老师企业微信二维码信息")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class WeworkTeacherVO implements Serializable {
@ApiModelProperty("id")
private Long id;
/**
* 企业微信二维码
*/
@ApiModelProperty("企业微信二维码")
private String qrcode;
/**
* 真实姓名
*/
@ApiModelProperty("真实姓名")
private String realName;
/**
* 图文素材标题名称
*/
@ApiModelProperty("图文素材标题名称")
private String title;
/**
* 客服类型:1:苏老师 2:张哥哥
*/
@ApiModelProperty("客服类型:1:苏老师 2:张哥哥")
private Integer teacherType;
/**
* 开关状态
*/
@ApiModelProperty("开关状态")
private Integer isOpen;
/**
* 图文素材地址
*/
@ApiModelProperty("图文素材地址")
private String materialUrl;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("创建时间")
private Date createTime;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("更新时间")
private Date updateTime;
private static final long serialVersionUID = 3857636238754367824L;
public void checkParam4Add() {
ParamChecker.checkStringIsEmpty(this.qrcode, "企业微信二维码不能为空!");
ParamChecker.checkStringIsEmpty(this.realName, "真实姓名不能为空!");
ParamChecker.checkStringIsEmpty(this.title, "Title 不能为空!");
ParamChecker.checkNumberIsNull(this.teacherType, "客服老师类型不能为空!");
}
public void checkParam4Update() {
ParamChecker.checkNumberIsNull(this.id, "主键ID不能为空!");
}
/**
* 判断是否需要更新素材
*
* @param weworkTeacher entity
* @return boolean
*/
public boolean checkIsChanged(WeworkTeacher weworkTeacher) {
if (Objects.isNull(weworkTeacher) || !this.id.equals(weworkTeacher.getId())) {
return false;
}
if (this.qrcode != null && !StrUtil.equals(this.qrcode, weworkTeacher.getQrcode())) {
return true;
}
if (this.title != null && !StrUtil.equals(this.title, weworkTeacher.getTitle())) {
return true;
}
return false;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pcloud.book.group.mapper.WeworkTeacherBookBindMapper">
<resultMap id="BaseResultMap" type="com.pcloud.book.group.entity.WeworkTeacherBookBind">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="book_id" jdbcType="BIGINT" property="bookId" />
<result column="book_name" jdbcType="VARCHAR" property="bookName" />
<result column="isbn" jdbcType="VARCHAR" property="isbn" />
<result column="wework_teacher_arr" jdbcType="VARCHAR" property="weworkTeacherArr" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>
<sql id="Base_Column_List">
id, book_id, book_name, isbn, wework_teacher_arr, create_time, update_time
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from wework_teacher_book_bind
where id = #{id,jdbcType=BIGINT}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
delete from wework_teacher_book_bind
where id = #{id,jdbcType=BIGINT}
</delete>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.pcloud.book.group.entity.WeworkTeacherBookBind" useGeneratedKeys="true">
insert into wework_teacher_book_bind (book_id, book_name, isbn,
wework_teacher_arr, create_time, update_time
)
values (#{bookId,jdbcType=BIGINT}, #{bookName,jdbcType=VARCHAR}, #{isbn,jdbcType=VARCHAR},
#{weworkTeacherArr,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}
)
</insert>
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.pcloud.book.group.entity.WeworkTeacherBookBind" useGeneratedKeys="true">
insert into wework_teacher_book_bind
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="bookId != null">
book_id,
</if>
<if test="bookName != null">
book_name,
</if>
<if test="isbn != null">
isbn,
</if>
<if test="weworkTeacherArr != null">
wework_teacher_arr,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="bookId != null">
#{bookId,jdbcType=BIGINT},
</if>
<if test="bookName != null">
#{bookName,jdbcType=VARCHAR},
</if>
<if test="isbn != null">
#{isbn,jdbcType=VARCHAR},
</if>
<if test="weworkTeacherArr != null">
#{weworkTeacherArr,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.pcloud.book.group.entity.WeworkTeacherBookBind">
update wework_teacher_book_bind
<set>
<if test="bookId != null">
book_id = #{bookId,jdbcType=BIGINT},
</if>
<if test="bookName != null">
book_name = #{bookName,jdbcType=VARCHAR},
</if>
<if test="isbn != null">
isbn = #{isbn,jdbcType=VARCHAR},
</if>
<if test="weworkTeacherArr != null">
wework_teacher_arr = #{weworkTeacherArr,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
update_time = #{updateTime,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
<update id="updateByPrimaryKey" parameterType="com.pcloud.book.group.entity.WeworkTeacherBookBind">
update wework_teacher_book_bind
set book_id = #{bookId,jdbcType=BIGINT},
book_name = #{bookName,jdbcType=VARCHAR},
isbn = #{isbn,jdbcType=VARCHAR},
wework_teacher_arr = #{weworkTeacherArr,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=TIMESTAMP},
update_time = #{updateTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=BIGINT}
</update>
<insert id="insertOrUpdate">
insert into wework_teacher_book_bind (book_id, book_name, isbn, wework_teacher_arr,
<if test="createTime != null">create_time,</if>
update_time)
values(
#{bookId},#{bookName},#{isbn},#{weworkTeacherArr},
<if test="createTime != null">#{createTime},</if>
update_time = #{updateTime,jdbcType=TIMESTAMP}
)
on duplicate key update
book_id = values(book_id),
book_name = values(book_name),
isbn = values(isbn),
wework_teacher_arr = values(wework_teacher_arr),
update_time = values(update_time)
</insert>
<delete id="deleteByBookId">
delete from wework_teacher_book_bind
where book_id = #{bookId,jdbcType=BIGINT}
</delete>
<select id="count4BookWxworkTeacherList" resultType="java.lang.Integer">
select count(0) from wework_teacher_book_bind
<where>
<if test="name != null">
book_name like concat('%',#{name},'%') OR isbn like concat('%',#{name},'%')
</if>
</where>
</select>
<select id="getBookWxworkTeacherList" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from wework_teacher_book_bind
<where>
<if test="name != null">
book_name like concat('%',#{name},'%') OR isbn like concat('%',#{name},'%')
</if>
</where>
limit #{offset},#{limit}
</select>
<select id="getByBookId" resultMap="BaseResultMap" >
select <include refid="Base_Column_List"/>
from wework_teacher_book_bind
where book_id = #{bookId}
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pcloud.book.group.mapper.WeworkTeacherMapper">
<resultMap id="BaseResultMap" type="com.pcloud.book.group.entity.WeworkTeacher">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="qrcode" jdbcType="VARCHAR" property="qrcode" />
<result column="real_name" jdbcType="VARCHAR" property="realName" />
<result column="title" jdbcType="VARCHAR" property="title" />
<result column="teacher_type" jdbcType="INTEGER" property="teacherType" />
<result column="is_open" jdbcType="INTEGER" property="isOpen" />
<result column="material_url" jdbcType="VARCHAR" property="materialUrl" />
<result column="media_id" jdbcType="VARCHAR" property="mediaId" />
<result column="account_id" jdbcType="BIGINT" property="accountId" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>
<sql id="Base_Column_List">
id, qrcode, real_name, title, teacher_type, is_open, material_url, media_id, account_id, create_time,
update_time
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from wework_teacher
where id = #{id,jdbcType=BIGINT}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
delete from wework_teacher
where id = #{id,jdbcType=BIGINT}
</delete>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.pcloud.book.group.entity.WeworkTeacher" useGeneratedKeys="true">
insert into wework_teacher (qrcode, real_name, title,
teacher_type, is_open, material_url, media_id,
account_id, create_time, update_time
)
values (#{qrcode,jdbcType=VARCHAR}, #{realName,jdbcType=VARCHAR}, #{title,jdbcType=VARCHAR},
#{teacherType,jdbcType=INTEGER}, #{isOpen,jdbcType=INTEGER}, #{materialUrl,jdbcType=VARCHAR}, #{mediaId,jdbcType=VARCHAR},
#{accountId,jdbcType=BIGINT}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}
)
</insert>
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.pcloud.book.group.entity.WeworkTeacher" useGeneratedKeys="true">
insert into wework_teacher
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="qrcode != null">
qrcode,
</if>
<if test="realName != null">
real_name,
</if>
<if test="title != null">
title,
</if>
<if test="teacherType != null">
teacher_type,
</if>
<if test="isOpen != null">
is_open,
</if>
<if test="materialUrl != null">
material_url,
</if>
<if test="mediaId != null">
media_id,
</if>
<if test="accountId != null">
account_id,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="qrcode != null">
#{qrcode,jdbcType=VARCHAR},
</if>
<if test="realName != null">
#{realName,jdbcType=VARCHAR},
</if>
<if test="title != null">
#{title,jdbcType=VARCHAR},
</if>
<if test="teacherType != null">
#{teacherType,jdbcType=INTEGER},
</if>
<if test="isOpen != null">
#{isOpen,jdbcType=INTEGER},
</if>
<if test="materialUrl != null">
#{materialUrl,jdbcType=VARCHAR},
</if>
<if test="mediaId != null">
#{mediaId,jdbcType=VARCHAR},
</if>
<if test="accountId != null">
#{accountId,jdbcType=BIGINT},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.pcloud.book.group.entity.WeworkTeacher">
update wework_teacher
<set>
<if test="qrcode != null">
qrcode = #{qrcode,jdbcType=VARCHAR},
</if>
<if test="realName != null">
real_name = #{realName,jdbcType=VARCHAR},
</if>
<if test="title != null">
title = #{title,jdbcType=VARCHAR},
</if>
<if test="teacherType != null">
teacher_type = #{teacherType,jdbcType=INTEGER},
</if>
<if test="isOpen != null">
is_open = #{isOpen,jdbcType=INTEGER},
</if>
<if test="materialUrl != null">
material_url = #{materialUrl,jdbcType=VARCHAR},
</if>
<if test="mediaId != null">
media_id = #{mediaId,jdbcType=VARCHAR},
</if>
<if test="accountId != null">
account_id = #{accountId,jdbcType=BIGINT},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
update_time = #{updateTime,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
<update id="updateByPrimaryKey" parameterType="com.pcloud.book.group.entity.WeworkTeacher">
update wework_teacher
set qrcode = #{qrcode,jdbcType=VARCHAR},
real_name = #{realName,jdbcType=VARCHAR},
title = #{title,jdbcType=VARCHAR},
teacher_type = #{teacherType,jdbcType=INTEGER},
is_open = #{isOpen,jdbcType=INTEGER},
material_url = #{materialUrl,jdbcType=VARCHAR},
media_id = #{mediaId,jdbcType=VARCHAR},
account_id = #{accountId,jdbcType=BIGINT},
create_time = #{createTime,jdbcType=TIMESTAMP},
update_time = #{updateTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=BIGINT}
</update>
<select id="count4WxworkTeacherList" resultType="java.lang.Integer">
select count(*)
from wework_teacher
<where>
<if test="name != null">
real_name like concat('%', #{name}, '%')
</if>
<if test="isOpen != null">
and is_open = #{isOpen}
</if>
<if test="teacherType != null">
and teacher_type = #{teacherType}
</if>
</where>
</select>
<select id="getWxworkTeacherList" resultType="com.pcloud.book.group.vo.WeworkTeacherVO">
select
id AS id,
qrcode AS qrcode,
real_name AS realName,
title AS title,
teacher_type AS teacherType,
is_open AS isOpen,
material_url AS materialUrl,
create_time AS createTime,
update_time AS updateTime
from wework_teacher
<where>
<if test="name != null">
real_name like concat('%', #{name}, '%')
</if>
<if test="isOpen != null">
and is_open = #{isOpen}
</if>
<if test="teacherType != null">
and teacher_type = #{teacherType}
</if>
</where>
limit #{offset},#{limit}
</select>
<select id="queryAll" resultType="com.pcloud.book.group.vo.WeworkTeacherVO">
select
id AS id,
teacher_type AS teacherType,
material_url AS materialUrl
from wework_teacher
where is_open = 1
</select>
<select id="listByIds" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from wework_teacher
where id in
<foreach collection="ids" item="item" close=")" open="(" separator=",">
${item}
</foreach>
</select>
<select id="getMaterialByIds" resultType="com.pcloud.book.group.vo.WeworkTeacherVO">
select
id AS id,
teacher_type AS teacherType,
material_url AS materialUrl
from wework_teacher
where is_open = 1 and id in
<foreach collection="longs" open="(" separator="," close=")" item="item">
${item}
</foreach>
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment