Commit aa9a4925 aa9a4925fefe790385e7d4e2e32c85fe3af1d9fc by xianghan

Merge remote-tracking branch 'origin/1.1.0-future-UserCenter接口转移' into 1.1.0-future-UserCenter接口转移

# Conflicts:
#	member-service-impl/src/main/java/com/topdraw/business/process/service/impl/UserOperationServiceImpl.java
2 parents 5be4e9f5 a4021e6a
Showing 15 changed files with 449 additions and 0 deletions
package com.topdraw.business.module.member.profile.repository;
import com.topdraw.business.module.member.domain.Member;
import com.topdraw.business.module.member.profile.domain.MemberProfile;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
......@@ -13,4 +14,6 @@ import java.util.Optional;
public interface MemberProfileRepository extends JpaRepository<MemberProfile, Long>, JpaSpecificationExecutor<MemberProfile> {
Optional<MemberProfile> findByMemberId(Long memberId);
Optional<MemberProfile> findFirstByMemberId(Long memberId);
}
......
package com.topdraw.business.module.weixin.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @author pengmengqing
* @date 2021-01-28
*/
@Entity
@Data
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_user_weixin__weixin_message_template")
public class UserWeixinWeixinMessageTemplate implements Serializable {
// ID
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 用户id
@Column(name = "user_weixin_id", nullable = false)
private Long userWeixinId;
// 微信消息模板id
@Column(name = "weixin_message_template_id", nullable = false)
private Long weixinMessageTemplateId;
// 用户是否订阅: 0-否, 1-是
@Column(name = "status", nullable = false)
private Integer status;
// 创建时间
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
public void copy(UserWeixinWeixinMessageTemplate source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
package com.topdraw.business.module.weixin.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @author pengmengqing
* @date 2021-01-28
*/
@Entity
@Data
@EntityListeners(AuditingEntityListener.class)
@Accessors(chain = true)
@Table(name="uc_weixin_message_template")
public class WeixinMessageTemplate implements Serializable {
// ID
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// 标识 order-下单成功通知,cancellation-核销成功通知
@Column(name = "code", nullable = false)
private String code;
// 微信appid
@Column(name = "appid", nullable = false)
private String appid;
// 微信模板id
@Column(name = "template_id", nullable = false)
private String templateId;
// 状态:0-无效,1-有效
@Column(name = "status", nullable = false)
private Integer status;
// 描述
@Column(name = "description")
private String description;
// 创建时间
@CreatedDate
@Column(name = "create_time")
private Timestamp createTime;
// 更新时间
@LastModifiedDate
@Column(name = "update_time")
private Timestamp updateTime;
public void copy(WeixinMessageTemplate source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
package com.topdraw.business.module.weixin.repository;
import com.topdraw.business.module.weixin.domain.UserWeixinWeixinMessageTemplate;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author pengmengqing
* @date 2021-01-28
*/
public interface UserWeixinWeixinMessageTemplateRepository extends JpaRepository<UserWeixinWeixinMessageTemplate, Long>, JpaSpecificationExecutor<UserWeixinWeixinMessageTemplate> {
}
package com.topdraw.business.module.weixin.repository;
import com.topdraw.business.module.weixin.domain.WeixinMessageTemplate;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.Optional;
/**
* @author pengmengqing
* @date 2021-01-28
*/
public interface WeixinMessageTemplateRepository extends JpaRepository<WeixinMessageTemplate, Long>, JpaSpecificationExecutor<WeixinMessageTemplate> {
Optional<WeixinMessageTemplate> findFirstByCode(String code);
Optional<WeixinMessageTemplate> findFirstByCodeAndAppid(String code, String appid);
Optional<WeixinMessageTemplate> findFirstByTemplateId(String templateId);
}
package com.topdraw.business.module.weixin.rest;
import com.topdraw.business.module.weixin.service.UserWeixinWeixinMessageTemplateService;
import com.topdraw.business.module.weixin.service.dto.UpdateUserWeixinWeixinMessageTemplateQueryCriteria;
import com.topdraw.common.ResultInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
/**
* @author pengmengqing
* @date 2021-01-28
*/
@Api(tags = "UserWeixinWeixinMessageTemplate管理")
@RestController
@RequestMapping("/ucEngine/api/UserWeixinWeixinMessageTemplate")
public class UserWeixinWeixinMessageTemplateController {
@Autowired
private UserWeixinWeixinMessageTemplateService userWeixinWeixinMessageTemplateService;
@PostMapping
@ApiOperation("新增或修改MemberWeixinMessageTemplate")
public ResultInfo createOrUpdate(@RequestBody UpdateUserWeixinWeixinMessageTemplateQueryCriteria criteria) {
userWeixinWeixinMessageTemplateService.createOrUpdate(criteria);
return ResultInfo.success(new ArrayList<>());
}
}
package com.topdraw.business.module.weixin.service;
import com.topdraw.business.module.weixin.domain.UserWeixinWeixinMessageTemplate;
import com.topdraw.business.module.weixin.service.dto.UpdateUserWeixinWeixinMessageTemplateQueryCriteria;
import com.topdraw.business.module.weixin.service.dto.UserWeixinWeixinMessageTemplateDTO;
import com.topdraw.business.module.weixin.service.dto.UserWeixinWeixinMessageTemplateQueryCriteria;
import org.springframework.data.domain.Pageable;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* @author pengmengqing
* @date 2021-01-28
*/
public interface UserWeixinWeixinMessageTemplateService {
void createOrUpdate(UpdateUserWeixinWeixinMessageTemplateQueryCriteria criteria);
}
package com.topdraw.business.module.weixin.service.dto;
import lombok.Data;
import java.util.List;
@Data
public class UpdateUserWeixinWeixinMessageTemplateQueryCriteria {
private Long memberId;
private List<UserWeixinWeixinMessageTemplateQueryCriteria> templateList;
}
package com.topdraw.business.module.weixin.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @author pengmengqing
* @date 2021-01-28
*/
@Data
public class UserWeixinWeixinMessageTemplateDTO implements Serializable {
// ID
private Long id;
// 用户id
private Long userWeixinId;
// 微信消息模板id
private Long weixinMessageTemplateId;
// 用户是否订阅: 0-否, 1-是
private Integer status;
// 创建时间
private Timestamp createTime;
// 更新时间
private Timestamp updateTime;
}
package com.topdraw.business.module.weixin.service.dto;
import com.topdraw.annotation.Query;
import lombok.Data;
/**
* @author pengmengqing
* @date 2021-01-28
*/
@Data
public class UserWeixinWeixinMessageTemplateQueryCriteria {
// 用户id
@Query(propName = "userWeixinId")
private Long memberId;
// 微信消息模板id
@Query
private Long weixinMessageTemplateId;
// 用户是否订阅: 0-否, 1-是
@Query
private Integer status = 1;
private String templateId;
}
package com.topdraw.business.module.weixin.service.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @author pengmengqing
* @date 2021-01-28
*/
@Data
public class WeixinMessageTemplateDTO implements Serializable {
// ID
private Long id;
// 标识 order-下单成功通知,cancellation-核销成功通知
private String code;
// 微信模板id
private String templateId;
// 描述
private String description;
}
package com.topdraw.business.module.weixin.service.dto;
import com.topdraw.annotation.Query;
import lombok.Data;
import java.util.List;
/**
* @author pengmengqing
* @date 2021-01-28
*/
@Data
public class WeixinMessageTemplateQueryCriteria{
private String codes;
@Query(propName = "code", type = Query.Type.IN)
private List<String> codeList;
@Query
private String appid;
@Query
private Integer status = 1;
}
package com.topdraw.business.module.weixin.service.impl;
import com.topdraw.business.module.weixin.domain.UserWeixinWeixinMessageTemplate;
import com.topdraw.business.module.weixin.domain.WeixinMessageTemplate;
import com.topdraw.business.module.weixin.repository.UserWeixinWeixinMessageTemplateRepository;
import com.topdraw.business.module.weixin.repository.WeixinMessageTemplateRepository;
import com.topdraw.business.module.weixin.service.UserWeixinWeixinMessageTemplateService;
import com.topdraw.business.module.weixin.service.dto.UpdateUserWeixinWeixinMessageTemplateQueryCriteria;
import com.topdraw.business.module.weixin.service.dto.UserWeixinWeixinMessageTemplateDTO;
import com.topdraw.business.module.weixin.service.dto.UserWeixinWeixinMessageTemplateQueryCriteria;
import com.topdraw.business.module.weixin.service.mapper.UserWeixinWeixinMessageTemplateMapper;
import com.topdraw.utils.FileUtil;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import com.topdraw.utils.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
/**
* @author pengmengqing
* @date 2021-01-28
*/
@Service
@Slf4j
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class UserWeixinWeixinMessageTemplateServiceImpl implements UserWeixinWeixinMessageTemplateService {
@Autowired
private UserWeixinWeixinMessageTemplateRepository userWeixinWeixinMessageTemplateRepository;
@Autowired
private WeixinMessageTemplateRepository weixinMessageTemplateRepository;
@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = Exception.class)
public void createOrUpdate(UpdateUserWeixinWeixinMessageTemplateQueryCriteria criteria) {
for (UserWeixinWeixinMessageTemplateQueryCriteria queryCriteria : criteria.getTemplateList()) {
queryCriteria.setMemberId(criteria.getMemberId());
Integer status = queryCriteria.getStatus();
queryCriteria.setStatus(null);
String templateId = queryCriteria.getTemplateId();
Optional<WeixinMessageTemplate> templateOptional = weixinMessageTemplateRepository.findFirstByTemplateId(templateId);
if (!templateOptional.isPresent()) {
log.info("template " + templateId + " not exist");
continue;
}
Long id = templateOptional.get().getId();
queryCriteria.setWeixinMessageTemplateId(id);
Optional<UserWeixinWeixinMessageTemplate> optional = userWeixinWeixinMessageTemplateRepository.findOne(((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, queryCriteria, criteriaBuilder)));
if (!optional.isPresent()) {
UserWeixinWeixinMessageTemplate userWeixinWeixinMessageTemplate = new UserWeixinWeixinMessageTemplate();
userWeixinWeixinMessageTemplate.setUserWeixinId(queryCriteria.getMemberId())
.setWeixinMessageTemplateId(queryCriteria.getWeixinMessageTemplateId())
.setStatus(status);
userWeixinWeixinMessageTemplateRepository.save(userWeixinWeixinMessageTemplate);
} else {
UserWeixinWeixinMessageTemplate UserWeixinWeixinMessageTemplate = optional.get();
if (!status.equals(UserWeixinWeixinMessageTemplate.getStatus())) {
UserWeixinWeixinMessageTemplate.setStatus(status);
userWeixinWeixinMessageTemplateRepository.save(UserWeixinWeixinMessageTemplate);
}
}
}
}
}
package com.topdraw.business.module.weixin.service.mapper;
import com.topdraw.base.BaseMapper;
import com.topdraw.business.module.weixin.domain.UserWeixinWeixinMessageTemplate;
import com.topdraw.business.module.weixin.service.dto.UserWeixinWeixinMessageTemplateDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author pengmengqing
* @date 2021-01-28
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface UserWeixinWeixinMessageTemplateMapper extends BaseMapper<UserWeixinWeixinMessageTemplateDTO, UserWeixinWeixinMessageTemplate> {
}
package com.topdraw.business.module.weixin.service.mapper;
import com.topdraw.base.BaseMapper;
import com.topdraw.business.module.weixin.domain.WeixinMessageTemplate;
import com.topdraw.business.module.weixin.service.dto.WeixinMessageTemplateDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author pengmengqing
* @date 2021-01-28
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface WeixinMessageTemplateMapper extends BaseMapper<WeixinMessageTemplateDTO, WeixinMessageTemplate> {
}