| @@ -0,0 +1,54 @@ | |||||
| package com.iformall.controller; | |||||
| import com.iformall.common.ResultData; | |||||
| import com.iformall.domain.po.WxCUser; | |||||
| import com.iformall.domain.po.WxPromotTitle; | |||||
| import com.iformall.domain.po.WxPromotType; | |||||
| import com.iformall.service.SysConfigService; | |||||
| import com.iformall.service.WxPromotService; | |||||
| import com.iformall.service.wx.WxPayService; | |||||
| import io.swagger.annotations.ApiImplicitParam; | |||||
| import io.swagger.annotations.ApiImplicitParams; | |||||
| import java.util.List; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.web.bind.annotation.*; | |||||
| @RestController | |||||
| @RequestMapping("/api/promote") | |||||
| public class WxPromoteController extends BaseController { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| @Autowired | |||||
| SysConfigService sysConfigService; | |||||
| @Autowired | |||||
| WxPromotService wxPromotService; | |||||
| @Autowired | |||||
| WxPayService wxPayService; | |||||
| @GetMapping("/list") | |||||
| public ResultData list() { | |||||
| WxCUser user = getCUser(); | |||||
| WxPromotType pt = new WxPromotType(); | |||||
| pt.updateTenantInfo(user); | |||||
| List<WxPromotType> plist = wxPromotService.promotTypeList(pt); | |||||
| return new ResultData(plist); | |||||
| } | |||||
| @GetMapping("/titleList") | |||||
| @ApiImplicitParams({ | |||||
| @ApiImplicitParam(name = "typeId", value = "页数", dataType = "Long", paramType = "query", required = true) | |||||
| }) | |||||
| public ResultData titleList(Long typeId) { | |||||
| WxCUser user = getCUser(); | |||||
| WxPromotTitle pt = new WxPromotTitle(); | |||||
| pt.setPromotTypeId(typeId); | |||||
| pt.updateTenantInfo(user); | |||||
| List<WxPromotTitle> plist = wxPromotService.getPromotTitleList(pt); | |||||
| return new ResultData(plist); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,31 @@ | |||||
| package com.iformall.domain.po; | |||||
| import com.baomidou.mybatisplus.annotation.TableName; | |||||
| import com.iformall.domain.po.base.TenantEntity; | |||||
| import lombok.Data; | |||||
| import lombok.EqualsAndHashCode; | |||||
| import lombok.ToString; | |||||
| import java.util.*; | |||||
| @TableName(value = "wx_promot_title") | |||||
| @Data | |||||
| @EqualsAndHashCode(callSuper = true) | |||||
| @ToString | |||||
| public class WxPromotTitle extends TenantEntity { | |||||
| private static final long serialVersionUID = -5094915301794376964L; | |||||
| protected Long id; | |||||
| @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createTime") | |||||
| private Date createTime; | |||||
| @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateTime") | |||||
| private Date updateTime; | |||||
| @io.swagger.annotations.ApiModelProperty(value="名称",name="title") | |||||
| private String title; | |||||
| @io.swagger.annotations.ApiModelProperty(value="对话加的前缀",name="prePromot") | |||||
| private String prePromot; | |||||
| @io.swagger.annotations.ApiModelProperty(value="typeId",name="promotTypeId") | |||||
| private Long promotTypeId; | |||||
| @io.swagger.annotations.ApiModelProperty(value="状态EnumDeleteStatus",name="status") | |||||
| private Integer status; | |||||
| } | |||||
| @@ -0,0 +1,29 @@ | |||||
| package com.iformall.domain.po; | |||||
| import com.baomidou.mybatisplus.annotation.TableName; | |||||
| import com.iformall.domain.po.base.TenantEntity; | |||||
| import lombok.Data; | |||||
| import lombok.EqualsAndHashCode; | |||||
| import lombok.ToString; | |||||
| import java.util.*; | |||||
| @TableName(value = "wx_promot_type") | |||||
| @Data | |||||
| @EqualsAndHashCode(callSuper = true) | |||||
| @ToString | |||||
| public class WxPromotType extends TenantEntity { | |||||
| private static final long serialVersionUID = -5094915301794376964L; | |||||
| protected Long id; | |||||
| @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createTime") | |||||
| private Date createTime; | |||||
| @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateTime") | |||||
| private Date updateTime; | |||||
| @io.swagger.annotations.ApiModelProperty(value="产品名称",name="name") | |||||
| private String name; | |||||
| @io.swagger.annotations.ApiModelProperty(value="产品图片",name="img") | |||||
| private String img; | |||||
| @io.swagger.annotations.ApiModelProperty(value="状态EnumDeleteStatus",name="status") | |||||
| private Integer status; | |||||
| } | |||||
| @@ -0,0 +1,33 @@ | |||||
| package com.iformall.enums; | |||||
| public enum EnumDeleteStatus { | |||||
| NORMAL(0, "正常"), | |||||
| DELETED(1, "已删除"), | |||||
| ; | |||||
| public static EnumDeleteStatus getEnum(Integer code) { | |||||
| for (EnumDeleteStatus value : values()) { | |||||
| if (value.getCode().equals(code)) { | |||||
| return value; | |||||
| } | |||||
| } | |||||
| return null; | |||||
| } | |||||
| private Integer code; | |||||
| private String message; | |||||
| EnumDeleteStatus(Integer code, String message) { | |||||
| this.code = code; | |||||
| this.message = message; | |||||
| } | |||||
| public Integer getCode() { | |||||
| return code; | |||||
| } | |||||
| public String getMessage() { | |||||
| return message; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,15 @@ | |||||
| package com.iformall.mapper; | |||||
| import java.util.*; | |||||
| import org.apache.ibatis.annotations.Param; | |||||
| import com.iformall.common.CommonMapper; | |||||
| import com.iformall.domain.po.WxPromotTitle; | |||||
| public interface WxPromotTitleMapper extends CommonMapper<WxPromotTitle, Long> { | |||||
| WxPromotTitle selectById(@Param("id")Long id,@Param("tenantId")String tenantId); | |||||
| List<WxPromotTitle> findList(WxPromotTitle wxProduct); | |||||
| } | |||||
| @@ -0,0 +1,15 @@ | |||||
| package com.iformall.mapper; | |||||
| import java.util.*; | |||||
| import org.apache.ibatis.annotations.Param; | |||||
| import com.iformall.common.CommonMapper; | |||||
| import com.iformall.domain.po.WxPromotType; | |||||
| public interface WxPromotTypeMapper extends CommonMapper<WxPromotType, Long> { | |||||
| WxPromotType selectById(@Param("id")Long id,@Param("tenantId")String tenantId); | |||||
| List<WxPromotType> findList(WxPromotType wxProduct); | |||||
| } | |||||
| @@ -0,0 +1,21 @@ | |||||
| package com.iformall.service; | |||||
| import com.iformall.domain.po.WxPromotTitle; | |||||
| import com.iformall.domain.po.WxPromotType; | |||||
| import java.util.List; | |||||
| public interface WxPromotService { | |||||
| /** | |||||
| * 根据Id获得实体 | |||||
| * | |||||
| * @param id | |||||
| * @return | |||||
| */ | |||||
| WxPromotType getPromotTypeById(Long id,String tenantId); | |||||
| List<WxPromotType> promotTypeList(WxPromotType product); | |||||
| List<WxPromotTitle> getPromotTitleList(WxPromotTitle product); | |||||
| } | |||||
| @@ -30,8 +30,6 @@ public class WxProductCache { | |||||
| RedisCacheUtils.removeCache(redisTemplate, key); | RedisCacheUtils.removeCache(redisTemplate, key); | ||||
| } | } | ||||
| private static String getFirstKey(String tenantId) { | private static String getFirstKey(String tenantId) { | ||||
| String key = Constant.productFirstPre + tenantId; | String key = Constant.productFirstPre + tenantId; | ||||
| return key; | return key; | ||||
| @@ -0,0 +1,75 @@ | |||||
| package com.iformall.service.cache; | |||||
| import java.util.List; | |||||
| import org.springframework.data.redis.core.RedisTemplate; | |||||
| import com.iformall.domain.po.WxProduct; | |||||
| import com.iformall.domain.po.WxPromotTitle; | |||||
| import com.iformall.domain.po.WxPromotType; | |||||
| import com.iformall.utils.Constant; | |||||
| import com.iformall.utils.RedisCacheUtils; | |||||
| public class WxPromotCache { | |||||
| private static String getKey(Long productId) { | |||||
| String key = Constant.promotPre + productId; | |||||
| return key; | |||||
| } | |||||
| public static WxPromotType getCache(RedisTemplate<String, Object> redisTemplate,Long promotTypeId) { | |||||
| String key = getKey(promotTypeId); | |||||
| return RedisCacheUtils.getCacheObject(redisTemplate, key, WxPromotType.class); | |||||
| } | |||||
| public static void cache(RedisTemplate<String, Object> redisTemplate,WxPromotType wxPromotType) { | |||||
| String key = getKey(wxPromotType.getId()); | |||||
| RedisCacheUtils.cache(redisTemplate, key, wxPromotType, 3600*24*7); | |||||
| } | |||||
| public static void removeCache(RedisTemplate<String, Object> redisTemplate,Long promotTypeId) { | |||||
| String key = getKey(promotTypeId); | |||||
| RedisCacheUtils.removeCache(redisTemplate, key); | |||||
| } | |||||
| private static String getListKey(String tenantId) { | |||||
| String key = Constant.promotListPre + tenantId; | |||||
| return key; | |||||
| } | |||||
| public static List<WxPromotType> getCacheList(RedisTemplate<String, Object> redisTemplate,String tenantId) { | |||||
| String key = getListKey(tenantId); | |||||
| return RedisCacheUtils.getCacheListObject(redisTemplate, key, WxPromotType.class); | |||||
| } | |||||
| public static void cacheList(RedisTemplate<String, Object> redisTemplate,List<WxPromotType> wxPromotTypeList,String tenantId) { | |||||
| String key = getListKey(tenantId); | |||||
| RedisCacheUtils.cache(redisTemplate, key, wxPromotTypeList, 3600*24*7); | |||||
| } | |||||
| public static void removeCacheList(RedisTemplate<String, Object> redisTemplate,String tenantId) { | |||||
| String key = getListKey(tenantId); | |||||
| RedisCacheUtils.removeCache(redisTemplate, key); | |||||
| } | |||||
| private static String getTitleListKey(Long promoteTypeId) { | |||||
| String key = Constant.promotTitleListPre + promoteTypeId; | |||||
| return key; | |||||
| } | |||||
| public static List<WxPromotTitle> getCacheTitleList(RedisTemplate<String, Object> redisTemplate,Long promoteTypeId) { | |||||
| String key = getTitleListKey(promoteTypeId); | |||||
| return RedisCacheUtils.getCacheListObject(redisTemplate, key, WxPromotTitle.class); | |||||
| } | |||||
| public static void cacheTitleList(RedisTemplate<String, Object> redisTemplate,List<WxPromotTitle> wxPromotTitleList,Long promoteTypeId) { | |||||
| String key = getTitleListKey(promoteTypeId); | |||||
| RedisCacheUtils.cache(redisTemplate, key, wxPromotTitleList, 3600*24*7); | |||||
| } | |||||
| public static void removeCacheTitleList(RedisTemplate<String, Object> redisTemplate,Long promoteTypeId) { | |||||
| String key = getTitleListKey(promoteTypeId); | |||||
| RedisCacheUtils.removeCache(redisTemplate, key); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,75 @@ | |||||
| package com.iformall.service.impl; | |||||
| import com.iformall.domain.po.*; | |||||
| import com.iformall.domain.po.base.TenantEntity; | |||||
| import com.iformall.enums.EnumDeleteStatus; | |||||
| import com.iformall.enums.EnumYesOrNo; | |||||
| import com.iformall.mapper.WxProductMapper; | |||||
| import com.iformall.mapper.WxPromotTitleMapper; | |||||
| import com.iformall.mapper.WxPromotTypeMapper; | |||||
| import com.iformall.service.*; | |||||
| import com.iformall.service.cache.WxProductCache; | |||||
| import com.iformall.service.cache.WxPromotCache; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.beans.factory.annotation.Qualifier; | |||||
| import org.springframework.data.redis.core.RedisTemplate; | |||||
| import org.springframework.stereotype.Service; | |||||
| import java.util.List; | |||||
| @Service | |||||
| public class WxPromotServiceImpl implements WxPromotService { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| @Autowired | |||||
| WxPromotTypeMapper wxPromotTypeMapper; | |||||
| @Autowired | |||||
| WxPromotTitleMapper wxPromotTitleMapper; | |||||
| @Autowired | |||||
| @Qualifier("objectCommonRedisTemplate") | |||||
| RedisTemplate<String, Object> objectCommonRedisTemplate; | |||||
| @Override | |||||
| public WxPromotType getPromotTypeById(Long id, String tenantId) { | |||||
| return wxPromotTypeMapper.selectById(id, tenantId); | |||||
| } | |||||
| @Override | |||||
| public List<WxPromotType> promotTypeList(WxPromotType product) { | |||||
| List<WxPromotType> productList = WxPromotCache.getCacheList(objectCommonRedisTemplate,product.getTenantId()); | |||||
| if (null == productList || productList.size() <= 0 ) { | |||||
| WxPromotType p = new WxPromotType(); | |||||
| p.updateTenantInfo(product); | |||||
| p.setStatus(EnumDeleteStatus.NORMAL.getCode()); | |||||
| List<WxPromotType> plist = wxPromotTypeMapper.findList(p); | |||||
| if (null != plist && plist.size() > 0 ) { | |||||
| WxPromotCache.cacheList(objectCommonRedisTemplate, plist,product.getTenantId()); | |||||
| return plist; | |||||
| } | |||||
| } | |||||
| return productList; | |||||
| } | |||||
| @Override | |||||
| public List<WxPromotTitle> getPromotTitleList(WxPromotTitle product) { | |||||
| List<WxPromotTitle> productList = WxPromotCache.getCacheTitleList(objectCommonRedisTemplate,product.getPromotTypeId()); | |||||
| if (null == productList || productList.size() <= 0 ) { | |||||
| WxPromotTitle p = new WxPromotTitle(); | |||||
| p.updateTenantInfo(product); | |||||
| p.setStatus(EnumDeleteStatus.NORMAL.getCode()); | |||||
| List<WxPromotTitle> plist = wxPromotTitleMapper.findList(p); | |||||
| if (null != plist && plist.size() > 0 ) { | |||||
| WxPromotCache.cacheTitleList(objectCommonRedisTemplate, plist,product.getPromotTypeId()); | |||||
| return plist; | |||||
| } | |||||
| } | |||||
| return productList; | |||||
| } | |||||
| } | |||||
| @@ -13,6 +13,9 @@ public class Constant { | |||||
| public static final String noticeListPrev = "gpt:noticeList:"; | public static final String noticeListPrev = "gpt:noticeList:"; | ||||
| public static final String linkPrev = "gpt:link:"; | public static final String linkPrev = "gpt:link:"; | ||||
| public static final String linkListPrev = "gpt:linkList:"; | public static final String linkListPrev = "gpt:linkList:"; | ||||
| public static final String promotPre = "gpt:promot:"; | |||||
| public static final String promotListPre= "gpt:promotList:"; | |||||
| public static final String promotTitleListPre= "gpt:promotTitleList:"; | |||||
| public static final String currentUser = "currentUser"; | public static final String currentUser = "currentUser"; | ||||
| public static final String TENANT_ID = "tenantId"; | public static final String TENANT_ID = "tenantId"; | ||||
| public static final String PARENT_TENANT_ID = "parentTenantId"; | public static final String PARENT_TENANT_ID = "parentTenantId"; | ||||
| @@ -0,0 +1,71 @@ | |||||
| <?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.iformall.mapper.WxPromotTitleMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxPromotTitle"> | |||||
| <id column="id" jdbcType="BIGINT" property="id"/> | |||||
| <result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/> | |||||
| <result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId" /> | |||||
| <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/> | |||||
| <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/> | |||||
| <result column="title" jdbcType="VARCHAR" property="title"/> | |||||
| <result column="pre_promot" jdbcType="VARCHAR" property="prePromot"/> | |||||
| <result column="status" jdbcType="INTEGER" property="status"/> | |||||
| <result column="promot_type_id" jdbcType="BIGINT" property="promotTypeId"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`title`,`pre_promot`,`status`,`promot_type_id` | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where `tenant_id` = #{tenantId} | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != createTime "> | |||||
| and `create_time` = #{createTime} | |||||
| </if> | |||||
| <if test=" null != updateTime "> | |||||
| and `update_time` = #{updateTime} | |||||
| </if> | |||||
| <if test=" null != name "> | |||||
| and `name` like concat('%', #{name},'%') | |||||
| </if> | |||||
| <if test=" null != status "> | |||||
| and `status` = #{status} | |||||
| </if> | |||||
| <if test=" null != promotTypeId "> | |||||
| and `promot_type_id` = #{promotTypeId} | |||||
| </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="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns"/> from wx_promot_title where id = #{id} and tenant_id = #{tenantId} | |||||
| </select> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxPromotTitle" resultMap="BaseResultMap"> | |||||
| select | |||||
| <include refid="allColumns"/> | |||||
| from wx_promot_title | |||||
| <include refid="dynamicWhereConditions"/> | |||||
| </select> | |||||
| </mapper> | |||||
| @@ -0,0 +1,66 @@ | |||||
| <?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.iformall.mapper.WxPromotTypeMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxPromotType"> | |||||
| <id column="id" jdbcType="BIGINT" property="id"/> | |||||
| <result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/> | |||||
| <result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId" /> | |||||
| <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/> | |||||
| <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/> | |||||
| <result column="name" jdbcType="VARCHAR" property="name"/> | |||||
| <result column="img" jdbcType="VARCHAR" property="img"/> | |||||
| <result column="status" jdbcType="INTEGER" property="status"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`name`,`img`,`status` | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where `tenant_id` = #{tenantId} | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != createTime "> | |||||
| and `create_time` = #{createTime} | |||||
| </if> | |||||
| <if test=" null != updateTime "> | |||||
| and `update_time` = #{updateTime} | |||||
| </if> | |||||
| <if test=" null != name "> | |||||
| and `name` like concat('%', #{name},'%') | |||||
| </if> | |||||
| <if test=" null != status "> | |||||
| and `status` = #{status} | |||||
| </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="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns"/> from wx_promot_type where id = #{id} and tenant_id = #{tenantId} | |||||
| </select> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxPromotType" resultMap="BaseResultMap"> | |||||
| select | |||||
| <include refid="allColumns"/> | |||||
| from wx_promot_type | |||||
| <include refid="dynamicWhereConditions"/> | |||||
| </select> | |||||
| </mapper> | |||||